home *** CD-ROM | disk | FTP | other *** search
/ TeX 1995 July / TeX CD-ROM July 1995 (Disc 1)(Walnut Creek)(1995).ISO / macros / plain / contrib / cellular / cell2.tex < prev    next >
Encoding:
Text File  |  1989-11-22  |  5.8 KB  |  217 lines

  1. % File:       TeX Inputs Cell2.tex
  2. % Author:     J E Pittman
  3. % Bitnet:     JEPTeX@TAMVenus
  4. % Internet:   JEPTeX@Venus.TAMU.EDU
  5. % Date:       November 8, 1988
  6. %
  7. % Prepare to scan the data, taking notes as to span sizes, row and 
  8. % column dimensions, et cetera.
  9. %
  10. \catcode`_=11 % Used to protect local control sequence names.
  11. %
  12. % The span info tokens contain sets of entries of the form \process 
  13. % {position}{number}{dimension}, where position is the terminal column 
  14. % or row, number is the number of columns or rows leading into the 
  15. % column or row, and dimension is the size of the information.
  16. \declaretoks\column_span_info
  17. \column_span_info={}%
  18. \declaretoks\row_span_info
  19. \row_span_info={}%
  20. %
  21. \let\process=\relax
  22. %
  23. \declarecount\column_number
  24. \column_number=0
  25. %
  26. % Create a column information entry and put the user's specifications 
  27. % into it.
  28. %
  29. \def\column#1{\relax
  30.    \advance\column_number \by 1
  31.    \last_column=\column_number
  32.    \get_column_number_data
  33.    \add_column_number_data {#1}%
  34.    \ignorespaces
  35.    }%
  36. %
  37. \declarecount\row_number
  38. \row_number=0
  39. %
  40. % Same as \column.
  41. %
  42. \def\row#1{\relax
  43.    \advance\row_number \by 1
  44.    \message{Scanning row \the\row_number.}%
  45.    \last_row=\row_number
  46.    \everyrow
  47.    \get_row_number_data
  48.    \add_row_number_data {#1}%
  49.    \column_number=0
  50.    \ignorespaces
  51.    }%
  52. %
  53. % \blank is used to generate a cell without a border or data.  In this 
  54. % context, all it does is absorb merges.
  55. %
  56. \def\blank{\relax
  57.    \advance\column_number \by 1
  58.    \if\column_number>\last_column
  59.       \advance\column_number \by -1
  60.       \column{}%
  61.    \fi
  62.    \everycolumn
  63.    \get_column_number_data
  64.    \ifnum\merge_rows>1
  65.       \add_column_number_data {\merge_rows=0\relax}%
  66.    \fi
  67.    \merge_columns=0
  68.    }%
  69. %
  70. % \cell is used to generate a normal, ruled cell.  In this context, it 
  71. % merely measures the cell and makes the appropriate notes.
  72. %
  73. \def\cell#1{\relax
  74.    \advance\column_number \by 1
  75.    \if\column_number>\last_column
  76.       \advance\column_number \by -1
  77.       \column{}%
  78.    \fi
  79.    \everycolumn
  80.    \get_column_number_data
  81. %
  82. % Typeset the information into temp box.
  83. %
  84.    \setbox\temp_box=\vbox \bgroup
  85.       \begingroup
  86.          \ifnum\merge_rows>0
  87.             \advance\row_number \by -\merge_rows
  88.             \get_row_number_data
  89.          \fi
  90.          \vskip \topborderskip
  91.          \endgroup
  92.       \hbox \bgroup
  93.          \begingroup
  94.             \ifnum\merge_columns>0
  95.                \advance\column_number \by -\merge_columns
  96.                \get_column_number_data
  97.             \fi
  98.             \hskip \leftborderskip
  99.             \endgroup
  100.          #1\vphantom{)}%
  101.          \hskip \rightborderskip
  102.          \egroup
  103.       \vskip \bottomborderskip
  104.       \egroup
  105. %
  106. % If it is a row merger, record it for later processing.
  107. %
  108.    \ifnum \merge_rows>0
  109.       \edef\temp{\process
  110.          {\the\merge_rows}{\the\ht\temp_box}{\the\row_number}%
  111.          \the\row_span_info
  112.          }%
  113.       \x_after\row_span_info\x_after=\x_after{\temp}%
  114. %     \message{\string\row_span_info=\the\row_span_info}% debug
  115.       \add_column_number_data {\merge_rows=0\relax}%
  116.    \else
  117. %
  118. % Not a merger, record the height if max.
  119. %
  120.       \ifdim\ht\temp_box>\rowheight
  121.          \let\info=\relax
  122.          \edef\temp{\the\row_number>\info
  123.                {\rowheight=\the\ht\temp_box\relax}}%
  124.          \let\info=\row_info
  125.          \x_after \add_data \temp
  126. %        \message{\string\row_info=\the\row_info}% debug
  127.          \rowheight=\ht\temp_box
  128.       \fi
  129.    \fi
  130. %
  131. % Same as above for column merger and width.
  132. %
  133.    \ifnum \merge_columns>0
  134.       \edef\temp{\process
  135.          {\the\merge_columns}{\the\wd\temp_box}{\the\column_number}%
  136.          \the\column_span_info
  137.          }%
  138.       \x_after\column_span_info\x_after=\x_after{\temp}%
  139. %     \message{\string\column_span_info=\the\column_span_info}% debug
  140.       \merge_columns=0
  141.    \else
  142.       \ifdim\wd\temp_box>\columnwidth
  143.          \let\info=\relax
  144.          \edef\temp{\the\column_number>\info
  145.                {\columnwidth=\the\wd\temp_box\relax}}%
  146.          \let\info=\column_info
  147.          \x_after \add_data \temp
  148. %        \message{\string\column_info=\the\column_info}% debug
  149.       \fi
  150.    \fi
  151.    }%
  152. %
  153. % \mergeright specifies that the corresponding position is to be 
  154. % merged with the cell to its right.
  155. %
  156. \def\mergeright{\relax
  157.    \advance\column_number \by 1
  158.    \if\column_number>\last_column
  159.       \advance\column_number \by -1
  160.       \column{}%
  161.    \fi
  162.    \everycolumn
  163.    \get_column_number_data
  164.    \advance\merge_columns \by 1
  165. %
  166. % Cancel a row merge, if present.
  167. %
  168.    \ifnum\merge_rows>1
  169.       \add_column_number_data {\merge_rows=0\relax}%
  170.    \fi
  171.    }%
  172. %
  173. % Same as \mergeright, except down.
  174. %
  175. \def\mergedown{\relax
  176.    \advance\column_number \by 1
  177.    \if\column_number>\last_column
  178.       \advance\column_number \by -1
  179.       \column{}%
  180.    \fi
  181.    \everycolumn
  182.    \get_column_number_data
  183.    \add_column_number_data {\advance\merge_rows \by 1\relax}%
  184.    \merge_columns=0
  185.    }%
  186. %
  187. % The horizontal and vertical stretch macros allow the user to specify 
  188. % an explicit stretch that will subsequently be processed like a span.  
  189. % User-specified stretches are processed after span caused ones.  The 
  190. % parameters are the starting column/row, the ending column/row, and 
  191. % the size of the stretch.
  192. %
  193. \def\horizontalstretch#1#2#3{\relax
  194.    \temp_count=#2\relax
  195.    \advance\temp_count \by -#1\relax
  196.    \edef\temp{\the\column_span_info\process{\the\temp_count}{#3}{#2}}%
  197.    \x_after \column_span_info\x_after=\x_after{\temp}%
  198. %  \message{\string\column_span_info=\the\column_span_info}% debug
  199.    \ignorespaces
  200.    }%
  201. %
  202. \def\verticalstretch#1#2#3{\relax
  203.    \temp_count=#2\relax
  204.    \advance\temp_count \by -#1\relax
  205.    \edef\temp{\the\row_span_info\process{\the\temp_count}{#3}{#2}}%
  206.    \x_after \row_span_info\x_after=\x_after{\temp}%
  207. %  \message{\string\row_span_info=\the\row_span_info}% debug
  208.    \ignorespaces
  209.    }%
  210. %
  211. \def\noalign#1{\ignorespaces}% don't do anything for the first pass
  212. %
  213. \catcode`_=8 % Return to normal.
  214. %
  215. \endinput
  216.